본문으로 건너뛰기

index

XSS

능동적 공격

  • 공격자가 웹 어플리케이션에 직접 공격 코드를 보내는 유형이다.
  • 디비를 공격하는 SQL 인젝션이 여기에 속한다.

수동적 공격

  • 준비한 피싱 사이트를 이용해 방문한 사람이 코드를 실행하도록 공격하는 방법이다.
  • XSS가 여기 속한다.

XSS 구조

  • 예를 들어 페이지 강제로 이동하는 태그가 있는 상황을 의미한다.

세가지 XSS

  • 반사형 XSS : 공격자가 준비한 함정에서 요청에 잘못된 스크립트를 서버에서 생성해 발생하는 XSS

  • 저장형 XSS : 공격 코드가 서버에서 저장되 사용자를 공격

  • DOM 기반 XSS : DOM 기반 취약점을 공격하는 것

XSS 대책

  • 문자열 이스케이프 : < > 을 특별한 기호로 해석해 이스케이프 처리하기

  • 속성값의 문자열을 쌍따옴표로 감싸기 : 속성값의 함수로 접근할 수 있게되면 사용자가 코드를 삽입할 수 있다.

  • 링크의 URL 스키마를 http/https로 제한하기 : href 속성을 이용한 XSS 공격은 앞에서 설명한 이스케이프 처리와 쌍따옴표를 묶는 방법으로 예방할 수 있다.

  • DOM 조작을 위한 매서드와 프로퍼티 사용 : InnterHtml 등을 이용해 내부 HTML을 파싱할 때 사용할 수 있다.

  • 쿠키에 HTTPONLY 속성을 추가하기 : 이를 이용해 자바스크립트로 쿠키를 가져올 수 없게된다.

  • 프레임워크 기능을 사용하는 방법 : 기본적으로 프레임워크는 이런 기능등을 제공해주지만 취약점도 존재한다

    • 대표적 에시로 REACT 의 dangerouslySetInnerHTML이 존재한다. 이는 INNERHTML 이랑 비슷한 용도로 dom에 접근하는 요소로
    • 이를 방지하기 위해선 DOMPurify 나 이스케이프 처리를 해줘야한다.
    • 또한 리엑트는 url 요소를 자바스크립트 스키마는 막지 않기 때문에 검증작업이 필요하다.

Content Security Policy를 사용한 XSS 대처

  • CSP는 악성 코드를 포함하는 인젝션 공격을 감지해 피해를 막는 브라우저 기능이다.

  • CSP 헤더를 적용하면 허가되지 않은 자바스크립트등의 불러오기를 실행 및 다한 할 수 있다.

Contnet - Security - Policy : script -src * . trusted.example